package com.rraj.common;

import java.math.BigDecimal;
import java.util.List;

import com.rraj.common.enums.PlatformEnums;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Lists;
import com.rraj.common.redis.RedisKey;
import com.rraj.common.utils.StrUtils;

public class ConfigUtil {

	Logger logger = LoggerFactory.getLogger(ConfigUtil.class);
	
	private final static ConfigUtil configUtil = new ConfigUtil();

	public static ConfigUtil getInstance() {
		return configUtil;
	}

	private ConfigUtil() {
		
	}

	/**
	 * RSA PrivateKey
	 * 
	 * @return
	 */
	public String getSysEncryptRSAPrivateKey() {
		return getConfig("sys.encrypt.rsa.private.key");
	}

	/**
	 * RSA PublicKey
	 * 
	 * @return
	 */
	public String getSysEncryptRSAPublicKey() {
		return getConfig("sys.encrypt.rsa.public.key");
	}

	/**
	 * MD5
	 * 
	 * @return
	 */
	public String getSysEncryptMD5() {
		return getConfig("sys.encrypt.md5");
	}

	/**
	 * DES
	 * 
	 * @return
	 */
	public String getSysEncryptDES() {
		return getConfig("sys.encrypt.des");
	}

	/**
	 * 最新版本
	 * 
	 * @return
	 */
	public String getSysVersion() {
		return getConfig("sys.version", "3.0");
	}

	/**
	 * 
	 * 
	 * @return      
	 * String
	 */
	public String getSysAndroidMD5() {
		return getConfig("sys.android.version.md5");
	}
	
	/**
	 * 
	 * @return      
	 * String
	 */
	public String getSysAndroidDownURL() {
		return getConfig("sys.android.downurl");
	}

	/**
	 * Redis 端口
	 * 
	 * @return
	 */
	public int getSysRedisPort() {
		return getConfig("sys.redis.port", 3690);
	}

	/**
	 * Redis Ip
	 * 
	 * @return
	 */
	public String getSysRedisIp() {
		return getConfig("sys.redis.ip");
	}

	/**
	 * Redis Pwd
	 * 
	 * @return
	 */
	public String getSysRedisPwd() {
		return getConfig("sys.redis.pwd");
	}

	/**
	 * 七牛默认空间图片地址
	 * 
	 * @return
	 */
	public String getQiNiuBucketResUrl() {
		return getConfig("qi.niu.bucket.res.url");
	}
	

	/**
	 * 七牛Access Key
	 * 
	 * @return
	 */
	public String getQiNiuAccessKey() {
		return getConfig("qi.niu.access.key");
	}

	/**
	 * 七牛Secret Key
	 * 
	 * @return
	 */
	public String getQiNiuSecretKey() {
		return getConfig("qi.niu.secret.key");
	}

	/**
	 * 七牛图片路径
	 * @return
	 */
	public String getQiNiuImgPath() {
		return getConfig("qi.niu.bucket.img.name");
	}

	/**
	 * 文件上传根路径
	 * 
	 * @return
	 */
	public String getUploadFileParentPath() {
		return getConfig("upload.file.parent.path");
	}

	/**
	 * 是否开发环境
	 * 
	 * @return
	 */
	public boolean isDev() {
		return getConfigAsBool("sys.isDev", false);
	}

	/**
	 * 获得图片路径
	 * @param image
	 * @return
	 */
	public String getQiNiuImgPath(String image) {
		return getQiNiuImgPath() + image;
	}

	/**
	 * 存管：加密Key
	 * @return      
	 * String
	 */
	public String getSunyardKey() {
		return getConfig("sys.sunyard.key");
	}
	
	
	/**
	 * 存管响应加密Key
	 * @return      
	 * String
	 */
	public String getSunyardResponseKey() {
		return getConfig("sys.sunyard.response.key");
	}

	/**
	 * 存管：接口地址
	 * @return      
	 * String
	 */
	public String getSunyardUrl() {
		return getConfig("sys.sunyard.url");
	}
	/**
	 * Web地址
	 * @return      
	 * String
	 */
	public String getWebUrl() {
		return getConfig("sys.web.url");
	}
	
	
	public String getWebUrl(String key) {
		return getConfig("sys.web.url")+key;
	}
	
	/**
	 * 获得启动Adv
	 * 
	 * @return      
	 * String
	 */
	public String getStartAdv(){
		return getConfig("sys.start.adv");
	}
	

	/**
	 * 存管：平台编号
	 * @return      
	 * String
	 */
	public String getSunyardPlatNo() {
		return getConfig("sys.sunyard.plat.no", null);
	}
	
	/**
	 * 爱家宝可持有最多金额
	 * @return      
	 * BigDecimal
	 */
	public BigDecimal getAijiabaoMaxAmount(){
		return new BigDecimal(getConfigAsDouble("sys.aijiabao.max.amount", 0));
	}
	
	/**
	 * 交易回调地址
	 * @return      
	 * String
	 */
	public String getTradeNotifyUrl(){
		return getConfig("sys.trade.notify.url");
	}
	
	/**
	 * 实名认证回调地址
	 * @return      
	 * String
	 */
	public String getRealNameNotifyUrl(){
		return getConfig("sys.realname.notify.url");
	}
	
	
	/**
	 * 出账回调地址
	 * @return      
	 * String
	 */
	public String getChargeOffNotifyUrl(){
		return getConfig("sys.chargeOff.notify.url");
	}
	
	/**
	 * 提现回调地址
	 * @return      
	 * String
	 */
	public String getWithdrawNotifyUrl(){
		return getConfig("sys.withdraw.notify.url");
	}
	
	/**
	 * 绑卡异步回调地址
	 * @return      
	 * String
	 */
	public String getBindCardNotifyUrl(){
		return getConfig("sys.bindCard.notify.url");
	}
	
	/**
	 * 绑卡异步回调地址
	 * @return      
	 * String
	 */
	public String getPlatfromRechargeNotifyUrl(){
		return getConfig("sys.trade.notify.url");
	}
	
	/**
	 * 是否开启快捷支付
	 * @return      
	 * boolean
	 */
	public boolean isOpenQuickPayment(){
		return getConfigAsBool("sys.quick.payment", true);
	}
	
	
	
	/**
	 * 订单支付超时,按秒计
	 * @return      
	 * int
	 */
	public int getPayOrderTimeOut(){
		int timeOut = getConfig("sys.pay.order.time.out", 3);
		return timeOut * 60;
	}
	
	/**
	 * 爱家宝每日赎回次数
	 * @return
	 */
	public int getAijiabaoWithdrawNum(){
		return getConfig("sys.aijiabao.withdraw.num", 2);
	}
	
	/**
	 * 用户单笔赎回最大金额
	 * @return
	 */
	public int getAijiabaoWithdrawMaxAmount(){
		return getConfig("sys.aijiabao.withdraw.max.amount", 50000);
	}
	
	/**
	 * 用户每日累计赎回金额
	 * @return
	 */
	public int getAijiabaoWithdrawMaxTotalAmount(){
		return getConfig("sys.aijiabao.withdraw.max.total.amount", 100000);
	}
	
	/**
	 * 爱家宝每日提现总额度
	 *  如果SPV账户额度少于此项，则以SPV的额度为准
	 * @return
	 */
	public int getAijiabaoWithdrawTotalAmount(){
		return getConfig("sys.aijiabao.withdraw.total.amount", 2000000);
	}
	
	/**
	 * 充值最少金额
	 * @return      
	 * int
	 */
	public int getRechargeMinAmount(){
		return getConfig("sys.recharge.min.amount", 100);
	}
	
	/**
	 * 爱家宝默认利率
	 * @return      
	 * BigDecimal
	 */
	public BigDecimal getAijiabaoDefaultRate(){
//		return new BigDecimal(getConfig("sys.aijiabao.default.rate")).setScale(2, RoundingMode.DOWN);
		return new BigDecimal(5);
	}
	
	/**
	 * 提现最少金额
	 * @return      
	 * int
	 */
	public int getWithdrawMinAmount(){
		return getConfig("sys.min.amount", 100);
	}
	
	/**
	 * 余额提现多数
	 * @return      
	 * int
	 */
	public int getBalanceWithdrawNum(){
		return getConfig("sys.balance.withdraw.num", 2);
	}

	/**
	 * 是否启用BtnList
	 * @return
	 */
	public boolean isEnableBtnList(){
		int isEnable = getConfig("sys.enable.btn.list", 0);
		return isEnable >= 1 ? true : false;
	}
	
	/**
	 * 是否开启任务
	 * @return      
	 * boolean
	 */
	public boolean isOpenTask(){
		int task = getConfig("sys.open.task", 2);
		return task == 1 ? true : false;
	}
	
	/**
	 * BtnList
	 * @return
	 */
	public List getBtnList(){
//		if(isEnableBtnList()){
//			String btnListStr = getConfig("sys.btn.list");
//			if(StrUtils.isNotEmpty(btnListStr)){
//				return JSON.parseArray(btnListStr);
//			}
//		}
		List<String> str = Lists.newArrayList();
//		str.add("http://img.lanrentuku.com/img/allimg/1206/5-120601152037.png");
//		str.add("http://img.lanrentuku.com/img/allimg/1206/5-120601152045-50.png");
//		str.add("http://img.lanrentuku.com/img/allimg/1206/5-120601152037.png");
//		str.add("http://img.lanrentuku.com/img/allimg/1206/5-120601152047-50.png");
		return str;
	}
	
	/**
	 * 升级提示语
	 * @return
	 */
	public String getUpgradeTips(){
		return getConfig("sys.upgradeTips", "修复bug");
	}
	
	/**
	 * 升级状态
	 * @return
	 */
	public int getUpgradeStatus(){
		return getConfig("sys.upgrade.status", 1);
	}
	
	
	/**
	 * 根据Key获得配置
	 * 
	 * @param key
	 * @return
	 */
	public final String getConfig(String key) {
		RedisKey.Key redisKey = RedisKey.Key.SYS_CONFIG;
		return null;//RedisClient.hget(redisKey, key);
	}

	/**
	 * 根据Key获得配置
	 * 
	 * @param key
	 * @return
	 */
	protected final Integer getConfig(String key, int defValue) {
		return new Integer(getConfig(key, "" + defValue));
	}

	/**
	 * 根据Key获得配置
	 * 
	 * @param key
	 * @return
	 */
	protected final String getConfig(String key, String defValue) {
		String configValue = getConfig(key);
		return configValue == null ? defValue : configValue;
	}

	/**
	 * 根据Key获得配置
	 * 
	 * @param key
	 * @return
	 */
	protected final String[] getConfigAsArray(String key) {
		return StrUtils.toArray(getConfig(key));
	}

	/**
	 * 根据Key获得配置
	 * 
	 * @param key
	 * @return
	 */
	protected final String[] getConfigAsArray(String key, String delim) {
		return StrUtils.toArrayByDelim(getConfig(key), delim);
	}

	/**
	 * 根据Key获得配置
	 * 
	 * @param key
	 * @return
	 */
	protected final boolean getConfigAsBool(String key, boolean defValue) {
		return Boolean.parseBoolean(getConfig(key, "" + defValue));
	}

	/**
	 * 根据Key获得配置
	 * 
	 * @param key
	 * @return
	 */
	protected final double getConfigAsDouble(String key, double defValue) {
		return Double.parseDouble(getConfig(key, "" + defValue));
	}

	/**
	 * 获取标签显示个数
	 * 
	 * @return
	 */
	public Integer getTagSize() {
		return getConfig("tag.size", 6);
	}
	
	/**
	 * 文件上传路径
	 */
	public String getFileUploadPath() {
		return getConfig("file.upload.path");
	}
	
	/**
	 * 获得支持上传的文件
	 */
	public String[] getUploadFileExts() {
		return ".jpg,.png,.jpeg".split(",");
	}
	
	/**
	 * 爱贝异步回调
	 */
	public String getIapPayPayCallBack(PlatformEnums platformEnums) {
		String payCallback = "iapPayIosCallback";
		if (platformEnums.getValue() == PlatformEnums.IOS.getValue()) {
			payCallback = "iapPayIosCallback";
		} else if (platformEnums.getValue() == PlatformEnums.Android.getValue()) {
			payCallback = "iapPayAndroidCallback";
		} else if (platformEnums.getValue() == PlatformEnums.H5.getValue()) {
			payCallback = "iapPayH5Callback";
		}
		if (isDev()) {
			return "http://testapi.pay.aijialicai.com.cn/api/tranNotify/" + payCallback;
		}
		return "http://api.aijialicai.com.cn/tranNotify/" + payCallback;
	}
	
	/**
	 * Web地址
	 */
	public String getWapURL() {
		if (isDev()) {
//			return "http://t-wap.aijialicai.com.cn/";
			return "http://192.168.10.198:8091/";
		}
		return "http://wap.renrenaijia.com/";
	}
	
	/**
	 * 时时彩地址
	 */
	public String getSSCURL() {
		return "http://caipiao.163.com/award/cqssc/";
	}
	
	/**
	 * IOS推送
	 */
	public String getJpushIOSMasterSecret() {
		return getConfig("jpush.ios.master.secret");
	}

	/**
	 * IOS推送
	 */
	public String getJpushIOSAppKey() {
		return getConfig("jpush.ios.appkey");
	}

	/**
	 * Android推送
	 */
	public String getJpushAndroidMasterSecret() {
		return getConfig("jpush.android.master.secret");
	}

	/**
	 * Android推送
	 */
	public String getJpushAndroidAppKey() {
		return getConfig("jpush.android.appkey");
	}
	
	/**
	 * Oss keyId
	 */
	public String getOssAccessKeyId() {
		return getConfig("oss.accessKeyId");
	}

	/**
	 * Oss keySecret
	 */
	public String getOssAccessKeySecret() {
		return getConfig("oss.accessKeySecret");
	}

	/**
	 * Oss picBucket
	 */
	public String getOssPicBucket() {
		return getConfig("oss.picBucket");
	}
	
	/**
	 * CDN图片地址
	 */
	public String getCdnOssUrl() {
		return getConfig("cdn.oss.url");
	}
	
	/**
	 * SMS 服务地址
	 */
	public String getSmsServerURL() {
		return getConfig("sms.server.url");
	}
	
	/**
	 * 用户，一个注册设备注册账户数量
	 */
	public int getMemberRegNumDevice(){
		return getConfig("member.registerDeviceNum", 5);
	}
	
	/**
	 * 用户，IP每天限制获取验证码次数 
	 */
	public int getMemberMobileCodeNumDailyIp(){
		return getConfig("member.mobileCodeNumDailyIp", 50);
	}
	
	/**
	 * 用户，手机验证码过期时间  
	 */
	public int getMemberMobileCodeExpire(){
		return getConfig("member.mobileCodeExpire", 15*60);
	}
	/**
	 * 获得用户默认头像
	 */
	public String getMemberDefaultAvatar(){
		return getConfig("member.default.avatar");
	}
	
	public String getMemberNickNameSensitive(){
		return getConfig("member.nickName.sensitive");
	}

	public String getDownloadAppUrl(){
		return getConfig("app.download.url");
	}	
	
	/**
	 * 终端ID
	 * @return      
	 * String
	 */
	public String getBaoFooTerminalId(){
		return getConfig("sys.baofoo.terminalid");
	}
	
	/**
	 * 商务号
	 * @return      
	 * String
	 */
	public String getBaoFooMemberId(){
		return getConfig("sys.baofoo.memberid");
	}
	
	/**
	 * 密钥密码
	 * @return      
	 * String
	 */
	public String getBaoFooPassword(){
		return getConfig("sys.baofoo.password");
	}
	
	public static void main(String[] args) {
		System.out.println(configUtil.getAijiabaoWithdrawNum());
	}
}
